package com.jz.pay3.design;

import com.mysql.jdbc.Driver;
import org.apache.ibatis.session.Configuration;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.jdbc.core.ConnectionCallback;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.StatementCallback;
import org.springframework.util.comparator.Comparators;
import org.springframework.web.servlet.DispatcherServlet;

import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.FilterInputStream;
import java.io.InputStream;
import java.util.*;

public class Test {
    public static void main(String[] args) {

    }
    void test(){
        Runtime runtime; // 单例模式
        Calendar calendar = Calendar.getInstance();// 工厂模式
        StringBuilder sb = new StringBuilder();// 建造者模式
//        原型模式：....
        DispatcherServlet dispatcherServlet; //适配器模式
        Driver driver; //  桥接模式

        InputStream inputStream ; // 装饰者模式：顶级接口或者抽象类
        ByteArrayInputStream byteArrayInputStream ;// 装饰者模式 具体实现接口类
        FilterInputStream filterInputStream; // 装饰者模式：装饰者类
        DataInputStream dataInputStream; // 装饰者模式 ：具体装饰者

        Map<String,String> map = new HashMap<>();// 组合模式
        Configuration Configuration; //外观模式
        Integer i; // 享元模式
        ConfigurableApplicationContext configurableApplicationContext; //  模板模式
        AbstractApplicationContext abstractApplicationContext;//  模板模式

        JdbcTemplate jdbcTemplate; // 命令模式：Invocker
        StatementCallback<Object> statementCallback; // 命令模式： Commandc接口
        ConnectionCallback<Object> ConnectionCallback;// 命令模式： Commandc接口

        // 访问者模式： 无
        List<Object> list = new ArrayList<>(); // 迭代器

        // 策略模式： Comparator实现不同的compare方式，即不同策略
        Arrays.sort(new Integer[]{1, 4, 2, 6}, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return Comparators.comparable().compare(o1,o2);
            }
        });
        // 策略模式:lambda
        Arrays.sort(new Integer[]{1, 4, 2, 6}, (o1,o2)-> Comparators.comparable().compare(o1,o2));

        // 责任链模式，比如 游戏闯关 / SpringMVC执行流程
        DispatcherServlet dispatcherServlet2;
        /*
        1.protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception
        2.HandlerExecutionChain mappedHandler = null;
        3.mappedHandler = this.getHandler(processedRequest);
        4.if (!mappedHandler.applyPreHandle(processedRequest, response)) {
            return;
          }
        5.mappedHandler.applyPostHandle(processedRequest, response, mv);
        6.mappedHandler.applyPreHandle(processedRequest, response)// 这里第4步处理了HandlerInterceptor.afterCompletion()
        7.
         */
    }

    void st(){
        BeanFactoryPostProcessor beanFactoryPostProcessor;
    }
}
